﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using WC.DL.DALC.IF;
using WC.BL.BE;
using System.Data;

namespace WC.DL.DALC.MSSQL
{
    public class UsuarioDALC: IUsuarioDALC
    {
        #region Singleton
        public static UsuarioDALC Instance
        {
            get
            {
                if (_instance == null)
                {
                    lock (typeof(UsuarioDALC))
                    {
                        if (_instance == null)
                        {
                            _instance = new UsuarioDALC();
                        }
                    }
                }
                return _instance;
            }
        }

        private UsuarioDALC() { }
        private static volatile UsuarioDALC _instance = null;
        #endregion


        #region IUsuarioDALC Members

        public string login(string pUsuario, string pClave)
        {
            int validezPwd = 30;
            //------------------
            int retpar = 1; string retval = string.Empty;
            if (!string.IsNullOrEmpty(pUsuario) && !string.IsNullOrEmpty(pClave))
            {
                retpar = (int)SqlHelper.ExecuteScalar(DALC.ConnStr, "usps_login", pUsuario, pClave);
                if (retpar == 1)
                {//verificar validez de la contraseña
                    UsuarioBE objUsuarioBE = new UsuarioBE();
                    objUsuarioBE = this.read(pUsuario);
                    if (objUsuarioBE.FeClave.AddDays(validezPwd) < DateTime.Now)//contraseña vencida
                    {
                        retval = "C";
                    }
                }
                else
                {
                    retval = "Nombre o clave de acceso incorrectos.";
                }
            }
            else
            {
                retval = "Debe ingresar el usuario y la contraseña.";
            }
            return retval;
        }

        public UsuarioBE read(string pUsuario)
        {
            UsuarioBE objUsuarioBE = null;
            DataSet ds = SqlHelper.ExecuteDataset(DALC.ConnStr, "usps_usuarios", pUsuario, DBNull.Value, DBNull.Value, DBNull.Value, DBNull.Value, DBNull.Value);
            if (ds.Tables.Count > 0)
            {
                DataTable dt = ds.Tables[0];
                if (dt.Rows.Count > 0)
                {
                    objUsuarioBE = new UsuarioBE();
                    objUsuarioBE.Usuario = dt.Rows[0]["usuario"].ToString();
                    objUsuarioBE.Nombre = dt.Rows[0]["nombre"].ToString();
                    objUsuarioBE.Ramo = dt.Rows[0]["ramo"].ToString();
                    objUsuarioBE.Correo = dt.Rows[0]["correo"].ToString();
                    objUsuarioBE.Bloqueado = bool.Parse(dt.Rows[0]["bloqueado"].ToString());
                    objUsuarioBE.AdminUser = bool.Parse(dt.Rows[0]["adminUser"].ToString());
                    if (bool.Parse(dt.Rows[0]["adminUser"].ToString()))
                        objUsuarioBE.NAdminUser = "Admin";
                    else
                        objUsuarioBE.NAdminUser = string.Empty;

                    if (bool.Parse(dt.Rows[0]["bloqueado"].ToString()))
                        objUsuarioBE.NBloqueado = "Activo";
                    else
                        objUsuarioBE.NBloqueado = string.Empty;                    
                    
                    objUsuarioBE.FeClave = DateTime.Parse(dt.Rows[0]["feclave"].ToString());
                    objUsuarioBE.FeRegistro = DateTime.Parse(dt.Rows[0]["feregistro"].ToString());
                }
            }
            return objUsuarioBE;
        }

        public List<GenericBE> read(bool pTipoUsuario)
        {
            List<GenericBE> lst = new List<GenericBE>();
            DataSet ds = SqlHelper.ExecuteDataset(DALC.ConnStr, "usps_usuarios", DBNull.Value, 
                                                  DBNull.Value, DBNull.Value, DBNull.Value,
                                                  pTipoUsuario, DBNull.Value);
            if (ds.Tables.Count > 0)
            {
                DataTable dt = ds.Tables[0];

                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    GenericBE objUsuarioBE = new GenericBE();
                    objUsuarioBE.Codigo = dt.Rows[i]["usuario"].ToString();
                    objUsuarioBE.Descripcion = dt.Rows[i]["nombre"].ToString();
                    lst.Add(objUsuarioBE);
                }
            }
            return lst;
        }

        public List<UsuarioBE> read(UsuarioBE pObjUsuarioBE)
        {
            List<UsuarioBE> lst = new List<UsuarioBE>();
            object usu = DBNull.Value;
            object correo = DBNull.Value;
            object nom = DBNull.Value;
            object ramo = DBNull.Value;
            
            if (!pObjUsuarioBE.Usuario.Equals(""))
                usu = pObjUsuarioBE.Usuario;
            if (!pObjUsuarioBE.Correo.Equals(""))
                correo = pObjUsuarioBE.Correo;
            if (!pObjUsuarioBE.Nombre.Equals(""))
                nom= pObjUsuarioBE.Nombre;
            if (!pObjUsuarioBE.Ramo.Equals(""))
                ramo = pObjUsuarioBE.Ramo;

                DataSet ds = SqlHelper.ExecuteDataset(DALC.ConnStr, "usps_usuarios",usu,
                                                                                 correo,
                                                                                 nom,
                                                                                 ramo,
                                                                                 DBNull.Value, DBNull.Value);

            if (ds.Tables.Count > 0)
            {
                DataTable dt = ds.Tables[0];

                for (int i = 0; i < dt.Rows.Count; i++ )
                {
                    UsuarioBE objUsuarioBE = new UsuarioBE();
                    objUsuarioBE.Usuario = dt.Rows[i]["usuario"].ToString();
                    objUsuarioBE.Nombre = dt.Rows[i]["nombre"].ToString();
                    objUsuarioBE.Ramo = dt.Rows[i]["ramo"].ToString();
                    objUsuarioBE.Correo = dt.Rows[i]["correo"].ToString();

                    objUsuarioBE.Bloqueado = bool.Parse(dt.Rows[i]["bloqueado"].ToString());
                    objUsuarioBE.AdminUser = bool.Parse(dt.Rows[i]["adminUser"].ToString());
                    if (bool.Parse(dt.Rows[i]["adminUser"].ToString()))
                        objUsuarioBE.NAdminUser = "Admin";
                    
                    if (bool.Parse(dt.Rows[i]["bloqueado"].ToString()))
                        objUsuarioBE.NBloqueado = "Bloqueado";
                    else
                        objUsuarioBE.NBloqueado = "Activo";

                    objUsuarioBE.FeClave = DateTime.Parse(dt.Rows[0]["feclave"].ToString());
                    objUsuarioBE.FeRegistro = DateTime.Parse(dt.Rows[0]["feregistro"].ToString());
                    lst.Add(objUsuarioBE);
                }
            }
            return lst;
        }

        public ClassListObjetBE usuariosXcriterioXmensaje(UsuarioBE pObjUsuarioBE, int pMensaje_id)
        {
            List<GenericBE> lst1 = new List<GenericBE>();
            List<GenericBE> lst2 = new List<GenericBE>();
            ClassListObjetBE rpta = new ClassListObjetBE();
            object usu = DBNull.Value;
            object correo = DBNull.Value;
            object nom = DBNull.Value;
            object ramo = DBNull.Value;

            if (!pObjUsuarioBE.Usuario.Equals(""))
                usu = pObjUsuarioBE.Usuario;
            if (!pObjUsuarioBE.Correo.Equals(""))
                correo = pObjUsuarioBE.Correo;
            if (!pObjUsuarioBE.Nombre.Equals(""))
                nom = pObjUsuarioBE.Nombre;
            if (!pObjUsuarioBE.Ramo.Equals(""))
                ramo = pObjUsuarioBE.Ramo;

            DataSet ds = SqlHelper.ExecuteDataset(DALC.ConnStr, "usps_usuariosXcriterioXmensaje", usu,
                                                                             correo,
                                                                             nom,
                                                                             ramo,
                                                                             pMensaje_id);

            if (ds.Tables.Count > 0)
            {
                DataTable dt = ds.Tables[0];

                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    GenericBE objUsuarioBE = new GenericBE();
                    objUsuarioBE.Codigo = dt.Rows[i]["usuario"].ToString();
                    objUsuarioBE.Descripcion ="(" + dt.Rows[i]["usuario"].ToString()+ ")" + dt.Rows[i]["nombre"].ToString();

                    lst1.Add(objUsuarioBE);
                }

                DataTable dt1 = ds.Tables[1];

                for (int i = 0; i < dt1.Rows.Count; i++)
                {
                    GenericBE objUsuarioBE = new GenericBE();
                    objUsuarioBE.Codigo = dt1.Rows[i]["usuario"].ToString();
                    objUsuarioBE.Descripcion = "(" + dt1.Rows[i]["usuario"].ToString() + ")" + dt1.Rows[i]["nombre"].ToString();

                    lst2.Add(objUsuarioBE);
                }
            }
            rpta.Lista1 = lst1;
            rpta.Lista2 = lst2;
            return rpta;
        }

        public string write(UsuarioBE pObjUsuarioBE)
        {
            int retpar = 1; string retval = string.Empty;
            if (pObjUsuarioBE != null)
            {
                retpar = SqlHelper.ExecuteNonQuery(DALC.ConnStr, "uspi_usuarios", pObjUsuarioBE.Usuario,
                                                                                  pObjUsuarioBE.Clave,
                                                                                  pObjUsuarioBE.Correo,
                                                                                  pObjUsuarioBE.Nombre,
                                                                                  pObjUsuarioBE.Ramo,
                                                                                  pObjUsuarioBE.AdminUser);
                if (retpar > 0)
                {
                    retval = "No se pudo registrar el usuario. Comuniquese con el administrador del sistema.";
                }
                else //RGF 20111011
                {
                    retval = "El registro se realizó con éxito";
                }
            }
            return retval;
        }

        public string update(UsuarioBE pObjUsuarioBE)
        {
            int retpar = 1; string retval = string.Empty;
            if (pObjUsuarioBE != null)
            {
                object pass = DBNull.Value;
                if (!pObjUsuarioBE.Clave.Equals(""))
                    pass = pObjUsuarioBE.Clave;
                retpar = SqlHelper.ExecuteNonQuery(DALC.ConnStr, "uspu_usuarios", pObjUsuarioBE.Usuario, 
                                                                                  pass, 
                                                                                  pObjUsuarioBE.Correo,
                                                                                  pObjUsuarioBE.Nombre,
                                                                                  pObjUsuarioBE.Ramo,
                                                                                  pObjUsuarioBE.AdminUser,
                                                                                  pObjUsuarioBE.Bloqueado);
                if (retpar >= 0)
                {
                    retval = "No se modificó el usuario. Comuniquese con el administrador del sistema.";
                }
                else
                {
                    retval = "Se modificó el usuario.";
                }
            }
            return retval;
        }

        #endregion
    }
}
